devhub-dev-parallel-test-results.html

Report generated on 23-Jul-2024 at 10:28:48 by pytest-html v3.1.1

Summary

62 tests ran in 1059.53 seconds.

51 passed, 1 skipped, 11 failed, 8 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

Result Test Duration Links
Error tests/devhub/test_addon_edit.py::test_set_addon_invisible_tc_id_c4371[Desktop]::setup 43.39
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="5b64937e-706e-4c4d-8775-ad9402b26f7c")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_set_addon_invisible_tc_id_c4371[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="5b64937e-706e-4c4d-8775-ad9402b26f7c")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1057e8b80>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_addon_validate.py::test_validate_addon_listed[Desktop]::setup 41.80
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="e0b9b867-9e1f-4a7d-831b-931222139ed7")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_addon_listed[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="e0b9b867-9e1f-4a7d-831b-931222139ed7")>, method = <function visibility_of_element_located.<locals>._predicate at 0x10584c2c0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_addon_validate.py::test_validate_addon_unlisted[Desktop]::setup 43.16
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="ced43fd2-4295-4e60-8ef7-52b78ad68790")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_addon_unlisted[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="ced43fd2-4295-4e60-8ef7-52b78ad68790")>, method = <function visibility_of_element_located.<locals>._predicate at 0x10584f240>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_no_manifest_found[Desktop]::setup 43.16
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="2c5c2c9a-2c14-472d-8dca-fcc53a5acc77")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_unlisted_addon_option_no_manifest_found[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="2c5c2c9a-2c14-472d-8dca-fcc53a5acc77")>, method = <function visibility_of_element_located.<locals>._predicate at 0x10584e840>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_unsupported_format[Desktop]::setup 43.88
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="6d668526-3f53-47dd-ae73-f6afa8dce0b7")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_unlisted_addon_option_unsupported_format[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="6d668526-3f53-47dd-ae73-f6afa8dce0b7")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1058dcae0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_devhub_home.py::test_devhub_login[Desktop]::setup 43.89
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="0203c9b5-c013-4a4b-88ac-eea167a7a5f8")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_login[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="0203c9b5-c013-4a4b-88ac-eea167a7a5f8")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1059f4e00>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_devhub_home.py::test_devhub_click_my_addons_header_link[Desktop]::setup 42.13
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="8becc048-acf7-4d88-ad64-4dcaed73a787")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_click_my_addons_header_link[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="8becc048-acf7-4d88-ad64-4dcaed73a787")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1059f6a20>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Error tests/devhub/test_devhub_home.py::test_devhub_resources_write_some_code[Desktop]::setup 43.82
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="aa30838e-7935-4a32-81f9-89d9e386f4bc")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_resources_write_some_code[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="aa30838e-7935-4a32-81f9-89d9e386f4bc")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105c885e0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred.
Failed tests/devhub/test_addon_edit.py::test_disable_enable_version_tc_id_c159074[Desktop] 16.77
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="c30e94ec-8177-4dc4-8511-01bf1c504081")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1057bfe10>

@pytest.mark.create_session("developer")
def test_disable_enable_version_tc_id_c159074(selenium, base_url, variables, wait):
"""Check that developers cand disable and re-enable addon versions;
This test works with an addon having a single version submitted and Approved"""
selenium.get(f"{base_url}/developers/addon/disable_version_auto/versions")
> manage_version = ManageVersions(selenium, base_url).wait_for_page_to_load()

tests/devhub/test_addon_edit.py:48:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/manage_versions.py:67: in wait_for_page_to_load
self.wait.until(EC.visibility_of_element_located(self._version_list_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="c30e94ec-8177-4dc4-8511-01bf1c504081")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105823600>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_addon_validate.py::test_validate_listed_addon_option_no_manifest_found[Desktop] 37.22
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="55cbdd14-3610-43f7-a987-be9cbdb467d3")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x10593ced0>

@pytest.mark.sanity
@pytest.mark.create_session("developer")
def test_validate_listed_addon_option_no_manifest_found(
selenium, base_url, variables, wait
):
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
"""Go to Devhub Addon Validate page"""
devhub_addon_validate = (
> DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)

tests/devhub/test_addon_validate.py:44:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
venv/lib/python3.11/site-packages/pypom/page.py:131: in open
self.wait_for_page_to_load()
pages/desktop/developers/devhub_addon_validate.py:43: in wait_for_page_to_load
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="55cbdd14-3610-43f7-a987-be9cbdb467d3")>, method = <function DevhubAddonValidate.wait_for_page_to_load.<locals>.<lambda> at 0x10584d6c0>
message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_addon_validate.py::test_validate_listed_addon_option_unsupported_format[Desktop] 37.17
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="59f790a8-b71c-41ac-a114-7650cf0ba215")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x10593c910>

@pytest.mark.sanity
@pytest.mark.create_session("developer")
def test_validate_listed_addon_option_unsupported_format(
selenium, base_url, variables, wait
):
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
"""Go to Devhub Addon Validate page"""
devhub_addon_validate = (
> DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)

tests/devhub/test_addon_validate.py:69:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
venv/lib/python3.11/site-packages/pypom/page.py:131: in open
self.wait_for_page_to_load()
pages/desktop/developers/devhub_addon_validate.py:43: in wait_for_page_to_load
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="59f790a8-b71c-41ac-a114-7650cf0ba215")>, method = <function DevhubAddonValidate.wait_for_page_to_load.<locals>.<lambda> at 0x10584dee0>
message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_header_profile_icon[Desktop] 36.09
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="de16e983-a7bf-4417-abd3-966b5b5d838e")>, base_url = 'https://addons-dev.allizom.org'

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_header_profile_icon(selenium, base_url):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> user_profile = page.click_user_profile_picture()

tests/devhub/test_devhub_home.py:119:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:249: in click_user_profile_picture
icon = self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="de16e983-a7bf-4417-abd3-966b5b5d838e")>, method = <function element_to_be_clickable.<locals>._predicate at 0x10571fe20>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_my_addons_list_items[Desktop] 5.61
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="614439de-9f33-43df-8b71-d2fcbbd814ef")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1058d7010>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_my_addons_list_items(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# check that logged-in users can see up to 3 latest addons they've submitted
> assert len(page.my_addons_list) in range(1, 4)
E assert 0 in range(1, 4)
E + where 0 = len([])
E + where [] = <pages.desktop.developers.devhub_home.DevHubHome object at 0x1057f0350>.my_addons_list
E + and range(1, 4) = range(1, 4)

tests/devhub/test_devhub_home.py:156: AssertionError
Failed tests/devhub/test_devhub_home.py::test_devhub_click_see_all_addons_link[Desktop] 35.91
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="31ec62df-f6d2-400d-89d2-1ac85994bb87")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105a05690>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_see_all_addons_link(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> my_addons_page = page.click_see_all_addons_link()

tests/devhub/test_devhub_home.py:187:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:289: in click_see_all_addons_link
self.wait_for_element_to_be_clickable(self._submit_addon_button_locator)
pages/desktop/base.py:46: in wait_for_element_to_be_clickable
self.wait.until(EC.element_to_be_clickable(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="31ec62df-f6d2-400d-89d2-1ac85994bb87")>, method = <function element_to_be_clickable.<locals>._predicate at 0x105c08cc0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_submit_new_addon_button_tc_id_c14882[Desktop] 36.08
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="72d3351f-9be4-44a5-8772-e01a36d17d4c")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105c50b90>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_submit_new_addon_button_tc_id_c14882(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> distribution_page = page.click_submit_addon_button()

tests/devhub/test_devhub_home.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:294: in click_submit_addon_button
self.wait_for_element_to_be_clickable(self._submit_addon_button_locator)
pages/desktop/base.py:46: in wait_for_element_to_be_clickable
self.wait.until(EC.element_to_be_clickable(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="72d3351f-9be4-44a5-8772-e01a36d17d4c")>, method = <function element_to_be_clickable.<locals>._predicate at 0x1058de020>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_submit_new_theme_button[Desktop] 5.65
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="231d22ec-8c41-45dd-aa01-418470e51c55")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105c34910>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_submit_new_theme_button(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> distribution_page = page.click_submit_theme_button()

tests/devhub/test_devhub_home.py:209:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:299: in click_submit_theme_button
self.find_element(*self._submit_theme_button_locator).click()
venv/lib/python3.11/site-packages/pypom/view.py:34: in find_element
return self.driver_adapter.find_element(strategy, locator)
venv/lib/python3.11/site-packages/pypom/selenium_driver.py:61: in find_element
return self.driver.find_element(strategy, locator)
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:856: in find_element
return self.execute(Command.FIND_ELEMENT, {
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:429: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x105c29190>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: .DevHub-MyAddons .B.../content/shared/webdriver/Errors.sys.mjs:511:5\\ndom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16\\n"}}'}

def check_response(self, response: Dict[str, Any]) -> None:
"""
Checks that a JSON response from the WebDriver does not have an error.

:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.

:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if not status or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen: str = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, str):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if not status:
status = value.get("status", ErrorCode.UNKNOWN_ERROR)
message = value.get("value") or value.get("message")
if not isinstance(message, str):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass

exception_class: Type[WebDriverException]
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_SHADOW_ROOT:
exception_class = NoSuchShadowRootException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if not value:
value = response['value']
if isinstance(value, str):
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']

screen = None # type: ignore[assignment]
if 'screen' in value:
screen = value['screen']

stacktrace = None
st_value = value.get('stackTrace') or value.get('stacktrace')
if st_value:
if isinstance(st_value, str):
stacktrace = st_value.split('\n')
else:
stacktrace = []
try:
for frame in st_value:
line = frame.get("lineNumber", "")
file = frame.get("fileName", "<anonymous>")
if line:
file = f"{file}:{line}"
meth = frame.get('methodName', '<anonymous>')
if 'className' in frame:
meth = "{}.{}".format(frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .DevHub-MyAddons .Button:nth-of-type(2)
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:243: NoSuchElementException
Failed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_tools_links_tc_id_C15072[Desktop] 35.95
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="ddb25ef0-a70a-473e-8042-040ca7b4aa4e")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_resources_footer_tools_links_tc_id_C15072(selenium, base_url, variables):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> assert "Tools" in page.resources.tools_section_header

tests/devhub/test_devhub_home.py:257:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:672: in tools_section_header
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="ddb25ef0-a70a-473e-8042-040ca7b4aa4e")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1059f5f80>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_promote_links_tc_id_C15072[Desktop] 36.11
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="04302219-e2e3-49c6-8266-c42f88f7786f")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_resources_footer_promote_links_tc_id_C15072(selenium, base_url, variables):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> assert "Promote" in page.resources.promote_section_header

tests/devhub/test_devhub_home.py:274:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:685: in promote_section_header
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="04302219-e2e3-49c6-8266-c42f88f7786f")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1059f60c0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_logout_tc_id_c15075[Desktop] 36.02
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="11501440-ef62-4167-9795-d1c221b0b64b")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x105fbf850>

@pytest.mark.sanity
@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_logout_tc_id_c15075(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# page.devhub_login("developer")
> page.click_sign_out()

tests/devhub/test_devhub_home.py:599:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:166: in click_sign_out
self.sign_out_link.click()
pages/desktop/developers/devhub_home.py:162: in sign_out_link
self.wait_for_element_to_be_displayed(self._sign_out_link_locator)
pages/desktop/base.py:42: in wait_for_element_to_be_displayed
self.wait.until(EC.visibility_of_element_located(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="11501440-ef62-4167-9795-d1c221b0b64b")>, method = <function visibility_of_element_located.<locals>._predicate at 0x105c882c0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Skipped tests/devhub/test_devhub_home.py::test_verify_newsletter_signup_confirmation[Desktop] 0.00
('/Users/alexandru.schek/addons-release-tests/tests/devhub/test_devhub_home.py', 383, 'Skipped: Skipped until this issue is fixed: https://github.com/mozilla/addons-server/issues/21335')
Passed tests/devhub/test_devhub_home.py::test_devhub_logo[Desktop] 5.96
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_extension_workshop[Desktop] 6.94
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_documentation[Desktop] 6.08
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_support[Desktop] 7.49
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_blog[Desktop] 6.62
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_overview[Desktop] 6.78
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_content[Desktop] 5.61
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_content_login_link[Desktop] 6.59
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_get_involved[Desktop] 7.76
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_logged_in_page_hero_banner_tc_id_C15072[Desktop] 16.06
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passed tests/devhub/test_devhub_home.py::test_devhub_my_addons_section_tc_id_C15072[Desktop] 14.86
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passed tests/devhub/test_devhub_home.py::test_devhub_my_addons_list_approval_status[Desktop] 5.78
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_click_first_theme_button[Desktop] 18.02
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_documentation_links_tc_id_C15072[Desktop] 19.90
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_participate[Desktop] 17.96
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_twitter[Desktop-0-x.com] 7.07
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_twitter[Desktop-1-x.com] 7.33
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-AMO Matrix channel] 8.53
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-Mozilla Discourse] 8.68
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_connect_newsletter_section[Desktop] 5.92
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_mozilla_footer_link[Desktop] 6.62
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - About] 6.30
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Blog] 7.70
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Extension Workshop] 6.60
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Hub] 5.82
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Policies] 6.10
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Community Blog] 7.61
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Forum] 9.36
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Report a bug] 6.29
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Review Guide] 6.19
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Desktop] 6.06
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Mobile] 5.93
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Enterprise] 5.95
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Browsers] 5.87
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - VPN] 5.95
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Relay] 6.47
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Monitor] 7.41
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Pocket] 7.62
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Twitter] 7.69
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Instagram] 6.05
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - YouTube] 6.24
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Privacy] 5.67
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Cookies] 5.70
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Legal] 5.79
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub French Translation] 6.26
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub German Translation] 6.20
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Chinese Translation] 6.32
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Russian Translation] 6.01
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Hebrew Translation] 6.56
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Legal] 5.93
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Creative Commons License] 5.77
No log output captured.